package vip.xiaonuo.modular.callback;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;
import vip.xiaonuo.modular.remoteapi.stairs.response.DeviceDTO;

import java.util.List;

@Data
@ToString
@JsonIgnoreProperties(ignoreUnknown = true)
public class CallBackDto {

  /**
   * 心跳
   */
  private String version;

  private String response;

  private Integer cmd_number;

  /**
   * code
   */
  private Integer code;
  /**
   * 命令
   */
  private String cmd;
  /**
   * 设备序列号
   */
  private String device_no;
  /**
   * 产品类型:1 为门禁，2  为梯控，6  为发卡器
   */
  private String device_type;
  /**
   * 卡片类型，1   IC  卡，2   CPU 卡
   */
  private Integer card_type;
  /**
   * 卡  ID
   */
  private String card_id;

  /**
   * 设备的时间
   */
  private String date_time;

  /**
   * 心跳 设备状态,按位（bit）表示，bit 置  1  表示该功能启用，bit0  是消防， #bit1  是时间段(置  1  表示有时间段正在执行),bit2 是二维码模块 "status":   0
   * <p>
   * <p>
   * 实时发卡记录 刷卡状态，0 表示成功，1 过有效期，2 此卡挂失，3  无权限，4 复制卡，5  未知
   */
  private String status;

  /**
   * 人员ID
   */
  private Integer person_id;

  /**
   * #角色，,0  为普通人员，1  为物业人员,2 访客。当刷卡状态为  3 和  5 时，没有此项 #如果是访客身份，人员姓名和卡  ID 是要访业主的信息，因为访客是不记名的。 "role":   1,
   */
  private String role;

  /**
   * 人员姓名，当刷卡状态为  3  和  5  时，没有此项
   */
  private String name;

  /**
   * 开锁类型，1   IC 卡，2    CPU 卡，3    韦根（人脸）,4   二维码
   */
  private String unlock_type;

  /**
   * 刷卡时间戳 2017/12/18   16:45:30
   */
  private String time_stamp;

  /**
   * 验证码,平台收到此验证码后，应答返回
   */
  private String token_code;

  /**
   * 二维码数据
   */
  private String data;


  /**
   * 设备信息
   */
  private DeviceDTO.DeviceInfoDTO device_info;
  /**
   * 服务器信息
   */
  private DeviceDTO.ServerInfoDTO server_info;
  /**
   * 公共楼层
   */
  private DeviceDTO.CommonFloorDTO common_floor;
  /**
   * 读卡器信息
   */
  private DeviceDTO.CardInfoDTO card_info;


  private String err_desc;

  private Integer total;

  private Integer page_no;

  private Integer count;

  private List<PersonDto> persons;

  private String text;

  @Data
  @Accessors(chain = true)
  public static class PersonDto {
    private String name;
    private Long id;
    private Integer role;
    private Integer live_floor;
    private Integer hand_floor_count;
    private List<Integer> hand_floor;
    private String wg_card_id;
    private String term;
  }

}
